#include <stdlib.h>
#include <stdio.h>

//retorna mensagem de erro ao abrir o arquivo
//sai do programa caso nao encontre o arquivo
void f_erropen(FILE *f, char *fopenerr)
{
	if (f == NULL)
	{
		printf("%s\n", fopenerr);
		exit(1);
	}
	else
		return;
}


//conta o numero de linhas do arquivo de erros
int f_countlines(char *fname, char *erro)
{
	char chr = 0;
	int count = 0;
	FILE *f = fopen(fname, "r");
	f_erropen(f, erro);
	while(feof(f) == 0)
	{
		chr = fgetc(f);
		if(chr == '\n')
			count++;
	}
	
	fclose(f);
	return count+1;
}

//pega as linhas do arquivo de erro e armazena numa matriz
//cada linha e armazenada em um indice do vetor
char **f_mmsgs(char *fname, int nlines)
{
	int i = 0;
	
	FILE *f = fopen(fname, "r");
	f_erropen(f, "ERROR 1\n");
	
	char **vmsg = (char **)malloc(sizeof(char*)*nlines);
	
	for(i=0; feof(f) == 0; i++)
	{
		char *strmsg = (char *)malloc(sizeof(char)*100);
		fgets(strmsg, 100, f);
		vmsg[i] = strmsg;
	}
	
	return vmsg;
	
	fclose(f);
}

//free na matriz de mensagens
void free_mmsgs(char **mmsgs, int nlines)
{
	int i=0;
	
	for(i=0; i<nlines; i++)
		free(mmsgs[i]);
		
	free(mmsgs);
}


main()
{
	int i=0;
	char **vmsg;
	vmsg = f_mmsgs("erro.conf", 6);
	printf("%d\n", f_countlines("erro.conf", vmsg[1]));
	for(i=0;i<f_countlines("erro.conf", vmsg[1]);i++)
		printf("%s", vmsg[i]);
		
	f_countlines("asdaksdba", vmsg[1]);
	free_mmsgs(vmsg, f_countlines("erro.conf", vmsg[1]));
}






